10 HOME
20 PRINT CHR$(4);"PR#3"
30 DIM B(20,80)
32 DIM C(1600)
33 DIM M1(2000)
35 X1=10:Y1=42:BB=0

36 INVERSE:VTAB 10:HTAB 30:PRINT"RANDOM MAZE TOOL":VTAB 23:HTAB 1:PRINT"                                                                               ":VTAB 23:HTAB 1:INPUT"INPUT A NUMBER BETWEEN 1 TO 99999 : ";RR:NORMAL
38 IF RR<1 OR RR>99999 THEN 36

39 NORMAL:HOME


40 VTAB 10:HTAB 40:PRINT " "
45 VTAB 10:HTAB 40:PRINT "M"
50 INVERSE:VTAB 10:HTAB 42:PRINT "$":NORMAL
52 VTAB 20:HTAB 6:PRINT"Y":VTAB 20:HTAB 10:PRINT"I":VTAB 20:HTAB 15:PRINT"R - RUN":VTAB 20:HTAB 32:PRINT"S - SAVE MAZE":VTAB 20:HTAB 66:PRINT"DOLLAR :    0"
54 VTAB 21 :HTAB 5:PRINT"G H":VTAB 21:HTAB 9:PRINT"J K":VTAB 21:HTAB 15:PRINT"A - RANDOM MAZE":VTAB 21:HTAB 32:PRINT"L - LOAD MAZE":VTAB 21:HTAB 47:PRINT"X - CATALOG":VTAB 21:HTAB 66:PRINT"  STEP :    0"
56 VTAB 22 :HTAB 6:PRINT"B":VTAB 22:HTAB 10:PRINT"M":VTAB 22:HTAB 15:PRINT"Q - QUIT":VTAB 22:HTAB 32:PRINT"C - CLEAR SCN":VTAB 22:HTAB 66:PRINT"RESTEP :    0"

58 INVERSE:VTAB 23:HTAB 1:PRINT"                                                                               ":NORMAL
59 GOSUB 1200

60 R1=0:NO=0
62 VTAB 10:HTAB 40:PRINT"M":INVERSE:VTAB X1:HTAB Y1:PRINT "$":VTAB 23:HTAB 1:PRINT"COMMAND :                                                                     ":VTAB 23:HTAB 11:GET A$:VTAB 23:HTAB 11:PRINT A$:NORMAL
65 IF A$="Q" THEN 7000
70 IF A$="I" THEN X2=X1-1:Y2=Y1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT"$":GOSUB 1100:B(X1,Y1)=1:GOSUB 1200:X1=X2:Y1=Y2
80 IF A$="J" THEN X2=X1:Y2=Y1-1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT"$":GOSUB 1100:B(X1,Y1)=1:GOSUB 1200:X1=X2:Y1=Y2
90 IF A$="K" THEN X2=X1:Y2=Y1+1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT"$":GOSUB 1100:B(X1,Y1)=1:GOSUB 1200:X1=X2:Y1=Y2
95 IF A$="M" THEN X2=X1+1:Y2=Y1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT"$":GOSUB 1100:B(X1,Y1)=1:GOSUB 1200:X1=X2:Y1=Y2
100 IF A$="Y" THEN X2=X1-1:Y2=Y1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT" ":GOSUB 1150:B(X1,Y1)=0:GOSUB 1200:X1=X2:Y1=Y2
110 IF A$="G" THEN X2=X1:Y2=Y1-1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT" ":GOSUB 1150:B(X1,Y1)=0:GOSUB 1200:X1=X2:Y1=Y2
120 IF A$="H" THEN X2=X1:Y2=Y1+1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT" ":GOSUB 1150:B(X1,Y1)=0:GOSUB 1200:X1=X2:Y1=Y2
130 IF A$="B" THEN X2=X1+1:Y2=Y1:GOSUB 1000:INVERSE:VTAB X2:HTAB Y2:PRINT"$":NORMAL:VTAB X1:HTAB Y1:PRINT" ":GOSUB 1150:B(X1,Y1)=0:GOSUB 1200:X1=X2:Y1=Y2
160 IF A$="R" THEN 300
170 IF A$="A" THEN 9000

172 IF A$="S" THEN 15000
180 IF A$="L" THEN 15100
182 IF A$="C" THEN 15500
184 IF A$="X" THEN 15800

200 GOTO 60

300 X4=10:Y4=40:I1=1:S1=0:H2=0
305 VTAB 20:HTAB 47:PRINT"           ":VTAB 21:HTAB 75:PRINT"   0":VTAB 22:HTAB 75:PRINT"   0"
310 IF B(10,40)=1 THEN B(10,40)=0:VTAB 10:HTAB 40:PRINT"M":BB=BB-1:GOSUB 1200
315 VTAB X4:HTAB Y4:PRINT"M"
320 X5=X4:Y5=Y4
330 IF B(X4+1,Y4-1)=0 THEN XX=X4+1:YY=Y4-1:Q=5:F1=1:GOTO 530
340 IF B(X4+1,Y4)=0 THEN XX=X4+1:YY=Y4:Q=4:F1=2:GOTO 530
350 IF B(X4+1,Y4+1)=0 THEN XX=X4+1:YY=Y4+1:Q=6:F1=3:GOTO 530
360 IF B(X4,Y4+1)=0 THEN XX=X4:YY=Y4+1:Q=3:F1=4:GOTO 530
370 IF B(X4-1,Y4+1)=0 THEN XX=X4-1:YY=Y4+1:Q=7:F1=5:GOTO 530
380 IF B(X4-1,Y4)=0 THEN XX=X4-1:YY=Y4:Q=2:F1=6:GOTO 530
390 IF B(X4-1,Y4-1)=0 THEN XX=X4-1:YY=Y4-1:Q=8:F1=7:GOTO 530
395 IF B(X4,Y4-1)=0 THEN XX=X4:YY=Y4-1:Q=1:F1=8:GOTO 530
400 I1=I1-1:IF I1<1 THEN I1=1
410 A7=C(I1):C(I1)=23:H2=H2+1:N1=22:N2=78:GOSUB 900
420 IF A7=1 THEN YY=Y4+1:XX=X4
430 IF A7=4 THEN XX=X4-1:YY=Y4
440 IF A7=3 THEN YY=Y4-1:XX=X4
450 IF A7=2 THEN XX=X4+1:YY=Y4
460 IF A7=5 THEN XX=X4-1:YY=Y4+1
470 IF A7=6 THEN XX=X4-1:YY=Y4-1
480 IF A7=7 THEN XX=X4+1:YY=Y4-1
490 IF A7=8 THEN XX=X4+1:YY=Y4+1
500 GOTO 550
530 IF B(XX,YY)=2 THEN XX=X4:YY=Y4:ON F1 GOTO 340,350,360,370,380,390,395,400
540 C(I1)=Q:I1=I1+1
550 VTAB X4:HTAB Y4:PRINT" ":B(XX,YY)=2 
560 IF XX>19 OR XX<1 OR YY>79 OR YY<1 THEN VTAB X5:HTAB Y5:PRINT" ":S1=0:H2=0:GOTO 650
570 X4=XX:Y4=YY:VTAB X4:HTAB Y4:PRINT"M":VTAB X5:HTAB Y5:PRINT" "
575 IF XX=10 AND YY=40 THEN R1=R1+1 
577 IF R1>8 THEN R1=0:NO=1:INVERSE:VTAB 20:HTAB 44:PRINT"NO EXIT":NORMAL:GOTO 650
580 S1=S1+1:N1=21:N2=78
590 IF S1>9 THEN N2=N2-1
600 IF S1>99 THEN N2=N2-1
610 IF S1>999 THEN N2=N2-1
620 VTAB N1:HTAB N2: PRINT S1
640 GOTO 315

650 FLASH:VTAB 23:HTAB 15:PRINT"WAITING":NORMAL
660 FOR I=0 TO 20
670 FOR J=0 TO 80
680 IF B(I,J)<>1 THEN B(I,J)=0
690 NEXT J
700 NEXT I
705 INVERSE:VTAB 23:HTAB 15:PRINT"        ":NORMAL
710 IF NO=1 THEN NO=0:GOTO 60
720 INVERSE:VTAB 20:HTAB 47:PRINT"SHORTCUT":NORMAL
730 X7=10:Y7=40:I2=1
740 IF C(I2)=5 THEN X8=X7+1:Y8=Y7-1
750 IF C(I2)=4 THEN X8=X7+1:Y8=Y7
760 IF C(I2)=6 THEN X8=X7+1:Y8=Y7+1
770 IF C(I2)=3 THEN X8=X7:Y8=Y7+1
780 IF C(I2)=7 THEN X8=X7-1:Y8=Y7+1
790 IF C(I2)=2 THEN X8=X7-1:Y8=Y7
792 IF C(I2)=8 THEN X8=X7-1:Y8=Y7-1 
794 IF C(I2)=1 THEN X8=X7:Y8=Y7-1
796 IF X8>19 OR X8<1 OR Y8>79 OR Y8<1 THEN VTAB X7:HTAB Y7:PRINT" ":VTAB 20:HTAB 47:PRINT"            ":GOTO 60
800 VTAB X8:HTAB Y8:PRINT"M":VTAB X7:HTAB Y7:PRINT" ":X7=X8:Y7=Y8
810 I2=I2+1
880 GOTO 740

900 IF H2>9 THEN N2=N2-1
910 IF H2>99 THEN N2=N2-1
920 IF H2>999 THEN N2=N2-1
930 VTAB N1:HTAB N2: PRINT H2
940 RETURN




1000 IF X2<1 THEN X2=19
1010 IF X2>19 THEN X2=1
1020 IF Y2<1 THEN Y2=79
1030 IF Y2>79 THEN Y2=1
1040 RETURN

1100 IF B(X1,Y1)=0 THEN BB=BB+1
1110 RETURN 

1150 IF B(X1,Y1)=1 THEN BB=BB-1
1160 RETURN

1200 IF BB<0 THEN BB=0
1210 IF BB<10 AND BB>-1 THEN NN1=78
1220 IF BB<100 AND BB>9 THEN NN1=77
1230 IF BB<1000 AND BB>99 THEN NN1=76
1240 IF BB<10000 AND BB>999 THEN NN1=75
1242 VTAB 20:HTAB 75:PRINT"    "
1260 VTAB 20:HTAB NN1:PRINT BB
1270 RETURN

1400 N1=21:N2=78
1410 IF S1>9 THEN N2=N2-1
1420 IF S1>99 THEN N2=N2-1
1430 IF S1>999 THEN N2=N2-1
1440 VTAB N1:HTAB N2: PRINT S1
1450 RETURN




7000 END

9000 INVERSE:VTAB 23:HTAB 50:PRINT"RANDOM MAZE":NORMAL

9001 NORMAL:VTAB 20:HTAB 75:PRINT"    ":VTAB 21:HTAB 75:PRINT"    ":VTAB 22:HTAB 75:PRINT"    ":BB=0:GOSUB 1200:S1=0:GOSUB 1400:N1=22:N2=78:H2=0:GOSUB 900

9002 FOR I=0 TO 20
9010 FOR J=0 TO 80
9030 B(I,J)=0
9040 NEXT J
9050 NEXT I

9100 FOR I=1 TO 19
9110 FOR J=1 TO 79
9115 IF I=10 AND J=40 THEN 9130
9120 VTAB I:HTAB J:PRINT"$":B(I,J)=1:BB=BB+1:GOSUB 1200
9130 NEXT J
9140 NEXT I

9150 FOR I=1 TO RR
9160 TE=RND(RR)
9170 NEXT I

9180 RR=TE

9400 P1=0:P2=0:P3=0:P4=0:P5=0
9410 M1(1)=0940:M1(2)=1140:M1(3)=1039:M1(4)=1041:P1=4
9415 REM

9500 P3=0
9510 IF P5>30000 THEN P4=1:GOSUB 10000:P4=0:GOTO 60
9520 P5=P5+1
9550 REM

9600 S9=INT(RND(RR)*P1+1)

9610 XC=INT(M1(S9)/100):YC=M1(S9)-XC*100
9611 IF XC<1 OR XC>19 OR YC<1 OR YC>79 THEN 9500 


9612 IF B(XC-1,YC)=0 THEN P3=P3+1:T1=1
9613 IF B(XC+1,YC)=0 THEN P3=P3+1:T2=1
9614 IF B(XC,YC-1)=0 THEN P3=P3+1:T3=1
9615 IF B(XC,YC+1)=0 THEN P3=P3+1:T4=1

9618 IF P3>1 THEN 9500

9620 T5=1:VTAB XC:HTAB YC:PRINT" ":B(XC,YC)=0:BB=BB-1:GOSUB 1200

9622 FOR J=S9 TO P1
9623 M1(J)=M1(J+1)
9624 NEXT J

9626 FOR K=P1 TO 2000:M1(K)=0:NEXT K

9627 P1=P1-1

9628 REM GOTO 12000
9630 IF B(XC-1,YC)=1 THEN P1=P1+1:M1(P1)=(XC-1)*100+YC
9637 REM GOTO 12100
9640 IF B(XC+1,YC)=1 THEN P1=P1+1:M1(P1)=(XC+1)*100+YC
9647 REM GOTO 12200
9650 IF B(XC,YC-1)=1 THEN P1=P1+1:M1(P1)=(XC)*100+YC-1
9657 REM GOTO 12300
9660 IF B(XC,YC+1)=1 THEN P1=P1+1:M1(P1)=(XC)*100+YC+1

9870 REM

9900 GOTO 9500

10000 REM
10010 S2=INT(RND(RR)*4+1)

10100 IF S2=1 THEN XB=1:YB=INT(RND(RR)*79+1):GOTO 11040
10110 IF S2=2 THEN XB=19:YB=INT(RND(RR)*79+1):GOTO 11040
10120 IF S2=3 THEN YB=1:XB=INT(RND(RR)*19+1):GOTO 11040
10130 IF S2=4 THEN YB=79:XB=INT(RND(RR)*19+1):GOTO 11040

11040 VTAB XB:HTAB YB:PRINT" ":B(XB,YB)=0:BB=BB-1:GOSUB 1200

11042 VTAB 20:HTAB 46:PRINT"CHANGE EXIT ? Y/N ":VTAB 20:HTAB 64:GET C$
11044 IF C$="Y" THEN VTAB XB:HTAB YB:PRINT"$":B(XB,YB)=1:BB=BB+1:GOSUB 1200:GOTO 10000
11046 IF C$="N" THEN VTAB 20:HTAB 46:PRINT"                   ":RETURN
11050 GOTO 11042

12000 FOR I=1 TO P1
12002 IF M1(I)=100*(XC-1)+YC THEN 12100
12004 NEXT I
12010 GOTO 9630 
12100 FOR I=1 TO P1
12102 IF M1(I)=100*(XC+1)+YC THEN 12200
12104 NEXT I
12110 GOTO 9640 
12200 FOR I=1 TO P1
12202 IF M1(I)=100*(XC)+YC-1 THEN 12300
12204 NEXT I
12210 GOTO 9650 
12300 FOR I=1 TO P1
12302 IF M1(I)=100*(XC)+YC+1 THEN 9870
12304 NEXT I
12310 GOTO 9660 


15000 INVERSE:VTAB 23:HTAB 1:PRINT"                                                 ":VTAB 23:HTAB 1:INPUT"FILENAME : ";F$:NORMAL
15005 INVERSE:VTAB 23:HTAB 50:PRINT"SAVING":NORMAL
15007 IF F$=CHR$(43) THEN INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":NORMAL:GOTO 60

15009 IF LEN(F$) > 24 THEN INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":NORMAL:GOTO 15000

15010 ONERR GOTO 22200

15012 PRINT CHR$(4);"OPEN";F$
15020 PRINT CHR$(4);"WRITE";F$ 
15030 FOR I=1 TO 19
15040 FOR J=1 TO 79
15050 PRINT B(I,J)
15060 NEXT J
15070 NEXT I
15072 PRINT CHR$(4);"CLOSE";F$

15074 X9=10:Y9=40:V8=10:V9=38:G1=0:MA=0

15075 M(1)=1:M(2)=2:M(3)=3:M(4)=4:M(5)=5:M(6)=6:M(7)=7:M(8)=8

15076 T$="R  DR  D  DL  L  UL  U  UR "


15081 PRINT CHR$(4);"OPEN";F$+".INDEX"
15082 PRINT CHR$(4);"WRITE";F$+".INDEX"
15083 PRINT X1:PRINT Y1:PRINT X9:PRINT Y9:PRINT V8:PRINT V9:PRINT G1:PRINT M(1):PRINT M(2):PRINT M(3):PRINT M(4):PRINT M(5):PRINT M(6):PRINT M(7):PRINT M(8):PRINT T$:PRINT MA
15084 PRINT CHR$(4);"CLOSE";F$+".INDEX"

15086 PRINT CHR$(4);"OPEN";F$+".BITMAP"
15088 PRINT CHR$(4);"WRITE";F$+".BITMAP" 
15090 FOR I=1 TO 19
15092 FOR J=1 TO 79
15093 PRINT B(I,J);
15094 NEXT J
15095 PRINT
15096 NEXT I
15097 PRINT CHR$(4);"CLOSE";F$+".BITMAP"

15098 INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":NORMAL
15099 GOTO 60

15100 INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":VTAB 23:HTAB 1:INPUT"FILENAME : ";F$:NORMAL
15105 INVERSE:VTAB 23:HTAB 50:PRINT"LOADING":NORMAL
15106 IF F$=CHR$(43) THEN INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":NORMAL:GOTO 60

15108 REM ONERR GOTO 22000

15110 PRINT CHR$(4);"OPEN";F$
15120 PRINT CHR$(4);"READ";F$ 
15130 FOR I=1 TO 19
15140 FOR J=1 TO 79
15150 INPUT B(I,J)
15160 NEXT J
15170 NEXT I
15180 PRINT CHR$(4);"CLOSE";F$
15181 PRINT CHR$(4);"OPEN";F$+".INDEX"
15182 PRINT CHR$(4);"READ";F$+".INDEX"
15183 INPUT X1:INPUT Y1:INPUT X9:INPUT Y9:INPUT V8:INPUT V9:INPUT G1:INPUT M(1):INPUT M(2):INPUT M(3):INPUT M(4):INPUT M(5):INPUT M(6):INPUT M(7):INPUT M(8):INPUT T$:INPUT MA
15184 PRINT CHR$(4);"CLOSE";F$+".INDEX"
15185 INVERSE:VTAB 23:HTAB 12:PRINT"                                                                    ":NORMAL
15187 GOSUB 15200

15188 IF G1>0 THEN INVERSE:VTAB 23:HTAB 50:PRINT"TARGET MODE":NORMAL:VTAB V8:HTAB V9:PRINT"T"

15189 NORMAL:VTAB 20:HTAB 45:PRINT"                     "
15190 LL=1:GOTO 60

15200 BB=0:VTAB 20:HTAB 75:PRINT"    "
15202 FOR I=1 TO 19
15210 FOR J=1 TO 79
15220 IF B(I,J)=1 THEN VTAB I:HTAB J:PRINT"$":BB=BB+1:GOSUB 1200
15222 IF B(I,J)<>1 THEN VTAB I:HTAB J:PRINT" "
15230 NEXT J
15240 NEXT I
15250 RETURN


15500 NORMAL:VTAB 20:HTAB 45:PRINT"                     ":INVERSE:VTAB 23:HTAB 66:PRINT"             ":NORMAL

15502 FOR I=1 TO 19
15510 FOR J=1 TO 79
15520 VTAB I:HTAB J:PRINT" "
15530 NEXT J
15540 NEXT I

15542 FOR I=0 TO 20
15543 FOR J=0 TO 80
15544 B(I,J)=0
15545 NEXT J
15546 NEXT I

15547 FOR I=0 TO 1600:C(I)=0:NEXT I

15548 BB=0
15549 VTAB 20:HTAB 75:PRINT"   0":VTAB 21:HTAB 75:PRINT"   0":VTAB 22:HTAB 75:PRINT"   0"
15550 GOTO 60

15800 HOME
15802 PRINT CHR$(4);"CATALOG"
15810 PRINT:PRINT"<PRESS ANY KEY TO BE CONTINUE>":NORMAL:GET CT$
15820 HOME:BB=0
15830 FOR I=1 TO 19
15840 FOR J=1 TO 79
15850 IF B(I,J)=1 THEN VTAB I:HTAB J:PRINT"$":BB=BB+1
15860 NEXT J
15870 NEXT I
15990 GOTO 52


22000 INVERSE:VTAB 23:HTAB 50:PRINT"FILE NOT FOUND":NORMAL

22010 Y=PEEK(222)
22011 IF Y=5 THEN PRINT CHR$(4);"CLOSE";F$:PRINT CHR$(4);"OPEN";F$:PRINT CHR$(4);"DELETE";F$:INVERSE:VTAB 23:HTAB 50:PRINT"FILE NOT FOUND":NORMAL:GOTO 15100
22014 GOTO 15100


22200 Y=PEEK(222)

22210 IF Y=4 THEN INVERSE:VTAB 23:HTAB 50:PRINT"WRITE PROTECTED":NORMAL:GOTO 15000
22212 IF Y=7 THEN INVERSE:VTAB 23:HTAB 50:PRINT"VOLUME MISMATCH":NORMAL:GOTO 15000
22214 IF Y=8 THEN INVERSE:VTAB 23:HTAB 50:PRINT"I/O ERROR":NORMAL:GOTO 15000
22216 IF Y=9 THEN INVERSE:VTAB 23:HTAB 50:PRINT"DISK FULL":NORMAL:GOTO 15000
22218 IF Y=10 THEN INVERSE:VTAB 23:HTAB 50:PRINT"FILE LOCKED":NORMAL:GOTO 15000
22219 IF Y=11 THEN INVERSE:VTAB 23:HTAB 50:PRINT"SYNTAX ERROR":NORMAL:GOTO 15000
22220 IF Y=13 THEN INVERSE:VTAB 23:HTAB 50:PRINT"FILE TYPE MISMATCH":NORMAL:GOTO 15000

22298 GOTO 15000





